package pe.com.hermes.hermetic.web.controller.configuracion;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.beans.ModuloUsuHermeticBean;
import pe.com.hermes.hermetic.beans.User;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.controller.base.IWebOpciones;
import pe.com.hermes.hermetic.web.forms.HMF1004Form;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

import pe.com.hermes.bean.ModuloUsuarioBean;
import pe.com.hermes.unidadesnegocio.operaciones.entities.SucursalEntity;


@RequestMapping("/mostrarHWF1004.html")
@Controller
@SessionAttributes(value={"form","codOpci","desOpci"})
public class CambiodeSucursalController implements IController{

        private Logger logger = Logger.getLogger(this.getClass());
        protected final static String MODU_HW = "HW";
        @Autowired
        HermeticFacade servicioHermetic;
        
        @RequestMapping(method={RequestMethod.GET})
        protected String showForm(ModelMap model, HttpServletRequest request) throws Exception {

            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu4");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONFIG_CAMBIO_SUCURSAL)) {
                return FORM_ACCESS_NULL_VIEW;
            }

            String cliente = (String)request.getSession().getAttribute("cliente");
            String sucursal = (String)request.getSession().getAttribute("sucursal");
            String desSucursal = servicioHermetic.getDescripcionSucursal(sucursal);
            session.setAttribute("desSucursal", desSucursal);

            HMF1004Form form = new HMF1004Form();
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            form.setSucursal(sucursal);
            
            try {
                
                List listadoSucursal = servicioHermetic.getSucursalesNoTodos();
                if (listadoSucursal != null) {
                    model.put("listadoSucursal", listadoSucursal);
                }
                AuditBean auditBean = new AuditBean(CAMB_SUCU);
                servicioHermetic.inseAudit(auditBean);
                 String codOpci = IWebOpciones.CAMB_SUCU;
                 String desOpci = servicioHermetic.getDesOpci(codOpci, request);
                 model.put("codOpci",codOpci);
                 model.put("desOpci",desOpci);
                model.put(FORM_KEY,form);  
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Error en el proceso. "+ e);
                return FORM_ERROR_VIEW;
            }        

            return FORM_CAMBIO_DE_SUCURSAL_VIEW;
        }

        @RequestMapping(params={"accion=cambiar"})
        private String cambiar (ModelMap model,@ModelAttribute(FORM_KEY) HMF1004Form form, HttpServletRequest request,Authentication authResult) throws Exception {    
        
            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu4");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONFIG_CAMBIO_SUCURSAL)) {
                return FORM_ACCESS_NULL_VIEW;
            }    
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            
            //int accionMapa = 1;
            String cliente = (String)request.getSession().getAttribute("cliente");
            String sucursal = (String)request.getSession().getAttribute("sucursal");
            //
             String codSucursal = request.getParameter("chk");
             request.getSession().setAttribute("sucursal", codSucursal);
             String desSucursal = servicioHermetic.getDescripcionSucursal(codSucursal);
             //HttpSession session = request.getSession(false);
             session.setAttribute("desSucursal", desSucursal);
             //session.setAttribute("sucu", new SucursalEntity(Integer.valueOf(codSucursal),desSucursal));
            
            try {
            
                List listadoSucursal = servicioHermetic.getSucursalesNoTodos();
                if (listadoSucursal != null) {
                    model.put("listadoSucursal", listadoSucursal);
                }
                // NSC 16-09-09 Se quita opciones del menu cuando es sucursal diferente a principal
                if (!codSucursal.equals("1")){
                    int tam ;
                    List listaMenu1 = (List)session.getAttribute("listaMenu1");
                    List listaMenu4 = (List)session.getAttribute("listaMenu4");
                    // Lista de Menu 1            
                    tam = listaMenu1.size();
                    if (listaMenu1 != null && listaMenu1.size()>0) {
                        for (int i = 0; i < tam; i++){
                            ModuloUsuHermeticBean mod = (ModuloUsuHermeticBean)listaMenu1.get(i);
                            if (mod.getCodOpci().equals("HWF2001")||mod.getCodOpci().equals("HWF2003")
                              ||mod.getCodOpci().equals("HWF2004")||mod.getCodOpci().equals("HWF2005")
                              ||mod.getCodOpci().equals("HWF2006")||mod.getCodOpci().equals("HWF2007")){
                                listaMenu1.remove(i);
                                i--;
                                tam = listaMenu1.size();
                            }      
                        }
                    }
                    // Lista de Menu 4
                     tam = listaMenu4.size();
                     if (listaMenu4 != null && listaMenu4.size()>0) {
                         for (int i = 0; i < tam; i++){
                             ModuloUsuHermeticBean mod = (ModuloUsuHermeticBean)listaMenu4.get(i);
                             if (mod.getCodOpci().equals("HWF1001")||mod.getCodOpci().equals("HWF1002")
                             ||mod.getCodOpci().equals("HWF2002")){
                                 listaMenu4.remove(i);
                                 i--;
                                 tam = listaMenu4.size();
                             }                    
                         }
                     }
                    if (listaMenu1 != null) 
                        session.setAttribute("listaMenu1", listaMenu1);
                    if (listaMenu4 != null)
                        session.setAttribute("listaMenu4", listaMenu4);
                }else{
                    //AdminSeguridad seguridad = new AdminSeguridadImpl();
                     
                     User user = Util.getUser();
                    String modulo = MODU_HW;
                    String perfil = (String)session.getAttribute("perfil");
                    List listaMenu1 = servicioHermetic.getModulos(modulo, user.getUsuWeb(),perfil,String.valueOf(user.getCodRazoSoci()), "1");
                    
                    if (listaMenu1 != null)
                        session.setAttribute("listaMenu1", listaMenu1);
                    List listaMenu4 = servicioHermetic.getModulos(modulo, user.getUsuWeb(),perfil,String.valueOf(user.getCodRazoSoci()), "4");
                    if (listaMenu4 != null)
                        session.setAttribute("listaMenu4", listaMenu4);
                }
                            
                model.put(FORM_KEY,form);  
            } catch (Exception e) {
                e.printStackTrace();
                //accionMapa = 0;
                return FORM_ERROR_VIEW;
            }

            return FORM_CAMBIO_DE_SUCURSAL_VIEW;
        }


}
